\paragraph{Présentation de la structure arborescente locale}
~\\

Dans cette seconde partie le but est de construire une base de donnée taxonomique à partir de celle du NCBI. La règle de construction est simple:
\\
L'idée directrice consiste à créer un dossier pour un taxon s'il possède suffisamment de génomes. Ainsi, si on se trouve à un niveau taxonomique, on créera un dossier pour chacun de ses fils s'ils ont au minimum un certain nombre de génomes, sinon pour les fils qui n'entre pas dans ces critères ils seront placés dans un dossier nommé {\it others}.
\\

Soit:
\begin{itemize}
  \item[.]Un taxon parent: $t$ 
  \item[.]Son dossier: $A$
  \item[.]Ses fils $f_1,...,f_n$ et leurs nombres de génomes respectifs: $g_1,...,g_n$
  \item[.]Un entier positif: $S$ (le nombre de génome minimum avoir pour créer un dossier)
\end{itemize}
~\\

On se place dans le dossier $A$ et pour chaque $f_i$, si $g_i \ge S$ alors on crée un dossier pour $f_i$ dans le répertoire courant sinon on crée un dossier {\it others} au niveau de $A$. On effectue de manière récursive le même traitement pour chaque dossier, autre que {\it others}, créé.
\\

Si on continue avec l'exemple du début (figure \ref{ncbi}), avec en plus le nombre de génomes:
\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.45]{../imports/metazoa_nbgenome.png}
\caption{\label{tree2} Nombre de génomes du taxon Metazoa et ses fils}
\end{center}
\end{figure}
~\\

Dans la figure \ref{tree2}, {\it Metazoa} possède 4115 génomes, {\it Eumetazoa} 4057, Mesoza 2 génomes...
Avec un seuil égal à six, si on se trouve dans le dossier construit pour {\it Metazoa} on devra alors créer un dossier pour {\it Eumetazoa} et {\it Porifera} car ils ont plus de six génomes. On devra également créer un unique dossier nommé {\it others} pour les taxons {\it Mesoza}, {\it Placozoa} et {\it environmental samples} car ces taxons ont moins de six génomes. 
\\

Cela donnerait la structure présentée en figure \ref{tr}:

\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.5]{../imports/metazoa_dossier.png}
\caption{\label{tr} Exemple de la structure de la BDD locale}
\end{center}
\end{figure}
~\\

Dans le dossier others on a donc les informations de Mesozoa, Placozoa et environmental samples qui ont respectivement 2, 5 et 1 génomes. Dans cet exemple on a donc huit ($2+5+1$) génomes dans ce dossier.

\paragraph{\label{generation}Génération des dossiers}
~\\

Pour décider de la création d'un dossier pour un taxon, il faut donc connaître son nombre de génomes. Malheureusement, les modules Perl ne permettent pas d'avoir directement le nombre
de génomes d'un taxon. Cependant on peut, à partir d'un taxon, récupérer son père. Ceci va permettre de calculer le nombre de génomes de chaque taxon.
 En effet, dans
l'arbre phylogénétique chaque feuille possède un seul génome mitochondrial puisque c'est un organisme précis. Pour un noeud quelconque, le nombre de génome correspond à la somme
du nombre de génomes de chacun de ses fils. Ainsi pour chaque espèce du fichier genbank récupérée auparavant, et donc feuille de l'arbre, en remontant jusqu'au taxon à partir duquel où souhaite créer notre arbre (la racine),  
on est sûr de parcourir l'ensemble des taxons et de compter leurs nombres de génomes mitochondriaux.
~\\
%\newpage
Chaque taxon étant associé à un taxid, on se propose d'utiliser une table de hachage avec le taxid et le nombre de génomes comme couple clé, valeur.  


\begin{figure}[H]
\begin{lstlisting}[numbers=left] 
      foreach $espece @tableauEspeces
      {
        $taxid = $espece->getTaxid();
        
        #un seul genome pour l'espece 
        tableHachage[$taxid] = 1;
        
        #on s'arrete lorsqu'on attend la racine
        while ($taxid != $taxidRacine)
        {
          # on recupere le taxid du pere
          $taxid = $taxid->getTaxidAncestor();
          
          # on incremente le nombre de genome pour le pere 
          tableHachage[$taxid] += 1;
        }
      }                                              
\end{lstlisting}
\begin{center}
\caption[Code Perl simplifié pour le comptage du nombre de génome]{\label{comptageGenome} Code Perl simplifié pour le comptage du nombre de génome. Pour chaque espèce du fichier genbank récupéré lors de la requête précédente (figure \ref{requete}), on récupère l'unique identifiant taxid et on initialise la table de hachage pour la case taxid. On remonte enfin jusqu'à l'ancêtre définit par l'utilisateur et on incrémente le nombre de génome pour chaque taxon ancêtre rencontré. }
\end{center}
\end{figure}
~\\

Lorsqu'on a déterminé le nombre de génome de tous les taxons on peut alors construire notre base de donnée locale sachant le seuil $S$ choisi (figure \ref{construction}). 

\begin{figure}[H]
\begin{lstlisting}[numbers=left] 
      # fonction recursive pour le traitement
      sub traite_taxon
      {
          #on recupere le parametre
          $taxid = @_;
          $nom_taxon = $taxid->getName();
          
          system("mkdir $nom_taxon");
          system("cd $nom_taxon");
          
          #on recupere les fils
          @les_fils = $bdd->each_Descendant($taxid);
          
          foreach $fils (@les_fils)
          {
            $taxid_fils = $fils->getTaxid();
            
            #si le nombre de genome est superieur a un certain seuil
            if (tableHache[$taxid_fils] >= $seuil)
            {
              #appel recursif
              traite_taxon($taxid_fils);
            }
            else
            {
              #on le fait qu'une fois
              system("mkdir others");
            }
          }   
      }
      
      #Et on appel depuis la racine
      &traite_taxon(taxidRacine);                                        
\end{lstlisting}
\caption[Code Perl simplifié pour la construction de la base de données locale]{\label{construction} Code Perl simplifié pour la construction de la base de données locale. On commence par récupéré le nom scientifique du taxon, afin d'avoir le nom du dossier. Après avoir créé le dossier on entre dans celui ci, et de manière récursive on fait la même chose pour tous les taxons fils.}
\end{figure}
~\\

En réalité un simple script pour la création des dossiers à été généré au lieu d'utiliser la fonction system à maintes reprises.
\newpage
Lors de la génération de l'arborescence de la base de donnée, on a également créé un fichier qu'utilisent les biologistes pour décrire les relations phylogénétiques. Ceci permet
 d'avoir une meilleure vue de la structure de la base de donnée locale. Autrement dit, cela permet de connaître les taxons retenus et le nombre de génomes par taxon. Ce fichier est au format {\em Newick} avec l'extension {\em .nwk} ~\cite{newick}. Un exemple de ce format se trouve en figure \ref {nwk}.
~\\

\begin{figure}[H]
\begin{center}
\includegraphics[scale=0.4]{../imports/exemple_newick1.png}
\caption[Exemple de format newick et l'arbre associé]{\label{nwk} Exemple de format newick et l'arbre associé. Il faut lire la syntaxe newick de la droite vers la gauche. Ici on rencontre A en premier signifiant que la racine de l'arbre est A, ensuite on rencontre une parenthèse fermante voulant dire que A possède au moins un fils, délimitée par les parenthèses les plus externes. Ici A a comme fils D et E, de même D a comme fils C et B.}
\end{center}
\end{figure}
~\\

Un exemple est donné en annexe \ref{ex_Arbre_Newick} : "Arbre newick à partir des eucaryotes".
\\

L'arborescence de la base de donnée créée, on peut maintenant remplir chaque dossier avec les données correspondantes. 
